package com.carleasoft.mps.file.service;


import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.extension.service.IService;
import com.carleasoft.mps.core.result.R;
import com.carleasoft.mps.file.bean.entity.FileManage;
import com.carleasoft.mps.file.bean.vo.FileDeleteVo;
import com.carleasoft.mps.file.bean.vo.FilePathVo;
import com.carleasoft.mps.file.bean.vo.FileUploadVo;
import feign.Param;
import org.springframework.web.multipart.MultipartFile;

import java.io.IOException;
import java.util.List;
import java.util.Map;

/**
 * <p>Description: 文件 service </p>
 *
 * @author wangxiao
 * @since 2020/5/14
 */
public interface FileManageService extends IService<FileManage> {

    /**
     * 上传文件
     *
     * @param multipartFile
     * @return
     * @throws Exception
     */
    FileUploadVo upload(MultipartFile multipartFile) throws Exception;

    /**
     * 批量上传文件
     *
     * @param multipartFiles
     * @return
     * @throws Exception
     */
    List<FileUploadVo> uploadFiles(MultipartFile[] multipartFiles) throws Exception;

    /**
     * 下载文件
     *
     * @param fileId 主键Id
     * @throws IOException
     */
    void download(String fileId) throws IOException;


    /**
     *文件访问
     *
     * @param fileId 主键Id
     * @throws IOException
     */
    void viewPicById(String fileId) throws IOException;

    /**
     *文件访问
     *
     * @param filePath 主键Id
     * @throws IOException
     */
    void viewPicByPath(String filePath,String fileSuffix) throws IOException;

    /**
     * 批量下载文件
     *
     * @param fileIds 文件地址编码集合
     * @throws IOException
     */
    void downloadFiles(List<String> fileIds) throws IOException;

    /**
     * 删除文件
     *
     * @param fileId
     * @return 是否删除成功
     */
    Boolean delete(String fileId);

    /**
     * 文件批量删除
     *
     * @param fileIds
     * @return
     */
    List<FileDeleteVo> deleteByFileIds(List<String> fileIds);

    /**
     * 通过文件编码查询文件信息
     *
     * @param fileId
     * @return
     */
    String getPathById(String fileId);

    /**
     * 通过文件编码批量获取文件路径
     *
     * @param fileIds
     * @return
     */
    List<FilePathVo> listPathByIds(List<String> fileIds);

    /**
     * 根据文件表的path获得文件的全路径
     *
     * @param simplePath
     * @return
     */
    String fullPath(String simplePath);

    FileUploadVo savePdf(String fileId) throws Exception;

    String removeFiles(List<String> fileStorages);





    Boolean saveMinioUrl(List<Map<String, String>> fieldList, String tableName, String id, String string);

    R filePartUploadMinio(MultipartFile file, String partFileIndexVo);

    List<FileManage> fileList(List<String> ids);
}
